package com.wang.listener;

import com.wang.util.JdbcUtil;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class ServletListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("全局作用域对象创建成功");
        JdbcUtil util = new JdbcUtil();
        Map map = new HashMap();
        for (int i=1;i<=20;i++){
            Connection con = util.createCon();
            System.out.println("在http启动的时候创建connection"+con);
            map.put(con,true);//true的意思时标识这个con处于空闲的状态,false表示通道正在被使用
        }
        //为了在http服务器运行期间,一直都可以使用这个map中存储的20个con,
        // 我们将map保存到全局作用域对象中(servletcontext中,)
        //但是之前都是使用request来get的,现在我们可以在参数servletContextEvent中get
        ServletContext application = servletContextEvent.getServletContext();
        application.setAttribute("key1",map);
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("全局作用域对象销毁成功");
        ServletContext application = servletContextEvent.getServletContext();
        Map map = (Map) application.getAttribute("key1");//将object转回map
        //将map中的key放到set中,因为set时无序的,我们可以使用迭代器
        //利用迭代器把set中的无序的key进行便利排序
        Iterator it = map.keySet().iterator();
        while (it.hasNext()){
            Connection con = (Connection) it.next();
            //看看conn是否关闭,如果没关就关了
            if (con!=null){
                System.out.println("兄弟们!我"+con+"先走一步!,8886~~~");
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
